package com.cj.park_dispatch.http

import android.app.Activity
import android.widget.Toast
import com.cj.park_dispatch.utils.LogUtil
import com.cj.park_dispatch.utils.NetUtils


import com.google.gson.JsonSyntaxException
import io.reactivex.Observer
import io.reactivex.disposables.Disposable
import java.net.ConnectException
import java.net.SocketTimeoutException
import java.util.concurrent.TimeoutException

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 *
 *
 *
 * @author yi
 * @date 2020/9/9
 */
abstract class BaseObserver<T>(private val activity: Activity) : Observer<T> {

    private val TAG: String =javaClass.simpleName
    
    var disposable: Disposable? = null

    override fun onSubscribe(d: Disposable) {
        try {
            if (activity.isFinishing) {
                return
            }
            disposable = d
            if (!NetUtils.isNetworkConnected(activity)) {
                onComplete()
                LogUtil.e("设备没有网络")
                Toast.makeText(activity, "设备没有网络", Toast.LENGTH_SHORT).show()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    override fun onError(e: Throwable) {
        try {
            //错误处理
            if (e is TimeoutException || e is SocketTimeoutException
                || e is ConnectException
            ) {
                LogUtil.e(TAG, "请求超时")
            } else if (e is JsonSyntaxException) {
                LogUtil.e(TAG, "JSON解析错误")
            } else if (e is HttpTimeException) {
                e.message?.apply {
                    LogUtil.e(TAG, this)
                }
            } else {
                e.message?.apply {
                    LogUtil.e(TAG, this)
                }
            }
        } catch (exception: Exception) {
            exception.printStackTrace()
        }
    }

    override fun onComplete() {}


}